/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.proyectos.ejb;

import com.proyectos.abstrac.BeanAbstract;
import com.proyectos.model.Carreras;
import com.proyectos.model.Matriculas;
import com.proyectos.model.Propuestas;
import com.proyectos.model.Proyectos;
import com.proyectos.model.alumnos;
import java.math.BigDecimal;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.Query;

/**
 *
 * @author Jose
 */
@Stateless
public class ProEjb extends BeanAbstract<Propuestas> implements ProEjbLocal {

    public ProEjb() {
        super(Propuestas.class);
    }

    @Override
    protected void validateNew(Propuestas entity) throws Exception {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public void grabarPropuesta(alumnos alumno, String nom, String desc) throws Exception {
        // boolean l=false;       
        Query que = this.getEntityManager().createNamedQuery("Matriculas.findByUk");
        que.setParameter("ncarrera", alumno.getNcarrera());
        que.setParameter("ncurso", alumno.getNcarrera().getCursoActivo());
        que.setParameter("nalumno", alumno);
        List<Matriculas> vmat = que.getResultList();
       
        if (vmat.isEmpty()) {
            
            this.context.setRollbackOnly();
            throw new Exception("El alumno no esta matriculado");
        } else {
            que = this.getEntityManager().createNamedQuery("Propuestas.findByAlumno");
            que.setParameter("ncarrera", alumno.getNcarrera());
            que.setParameter("nalumno", alumno);
            List<Propuestas> vmat2 = que.getResultList();
            
            if (vmat2.isEmpty()) {
                Propuestas pro = new Propuestas();
                
                pro.setNalumno(alumno);
                pro.setNcarrera(alumno.getNcarrera());
                pro.setCnombre(nom);
                pro.setCdescripcion(desc);
                pro.setLvisto(BigDecimal.ZERO);
                this.getEntityManager().persist(pro);
            } else {
                
                this.context.setRollbackOnly();
                throw new Exception("El alumno ya ha hecho una propuesta");

            }
        }

    }

    @Override
    public void denegarPropuesta(Propuestas prop) throws Exception {
        prop.setLvisto(BigDecimal.valueOf(2));
        this.save(prop);
    }

    @Override
    public void resetearPropuesta(Propuestas prop) throws Exception {
        if (prop.getLvisto().equals(BigDecimal.ONE)) {
            throw new Exception("La propuesta no se puede resetear");
        } else {
            prop.setLvisto(BigDecimal.valueOf(0));
            this.save(prop);
        }
    }

    @Override
    public void matriculaPropuesta(alumnos alumno, String nom, String desc, Carreras car, String ref, Propuestas prop) throws Exception {
        Query que = this.getEntityManager().createNamedQuery("Proyectos.findByCreferencia");
        que.setParameter("ncarrera", alumno.getNcarrera());
        que.setParameter("creferencia", ref);
        List<Proyectos> vmat = que.getResultList();

        if (vmat.isEmpty()) {
            Proyectos project = new Proyectos();
            project.setCreferencia(ref);
            project.setNcarrera(alumno.getNcarrera());
            project.setCnombre(nom);
            project.setCdescripcion(desc);

            this.getEntityManager().persist(project);

            que = this.getEntityManager().createNamedQuery("Proyectos.findByCreferencia");
            que.setParameter("ncarrera", alumno.getNcarrera());
            que.setParameter("creferencia", ref);
            List<Proyectos> vmat2 = que.getResultList();

            project = vmat2.get(0);

            que = this.getEntityManager().createNamedQuery("Matriculas.findByUk");
            que.setParameter("ncarrera", alumno.getNcarrera());
            que.setParameter("ncurso", alumno.getNcarrera().getCursoActivo());
            que.setParameter("nalumno", alumno);
            List<Matriculas> vmat3 = que.getResultList();
            if (vmat3.isEmpty()) {
                throw new Exception("El alumno no está matriculado");

            } else {
                Matriculas mat = vmat3.get(0);
                if (mat.getNproyecto() == null) {
                    mat.setNproyecto(project);
                    this.getEntityManager().merge(mat);
                    Propuestas pro2 = this.get(prop.getNcodigo());
                    pro2.setLvisto(BigDecimal.ONE);
                    this.getEntityManager().merge(pro2);
                } else {
                    throw new Exception("El alumno ya tiene proyecto asignado");
                }
            }

        } else {

            throw new Exception("Un proyecto con esta referencia ya existe");
        }

    }

}
